#include <iostream>
#include <vector>
using namespace std;
void slove1(vector<int>& a) {
    int e = 0;
    for(auto s : a) {
        e ^= s;
    }
    cout << "the value is : " << e << endl;
}
void slove2(vector<int>& b) {
    int e = 0;
    int ehasone = 0;
    for(auto s : b) {
        e ^= s;
    }
    int rightone = e & (~e + 1); // 这里是找到e中最右位置的1，其他位置为零，这是因为两个不同的值在一个位置上有一个数这个位置为1，另一个数在这个位置为0，我们可以把这个作为区分
    for(auto s : b) {
        if((s & rightone) != 0) {
            ehasone ^= s;
        }
    }
    cout << "the value is : " << ehasone << " " << (e ^ ehasone) << endl;
}
using namespace std;
int main() {
    vector<int> a = { 3, 3, 2, 3, 1, 1, 1, 3, 1, 1, 1 };
    slove1(a);
    vector<int> b = { 4, 3, 4, 2, 2, 2, 4, 1, 1, 1, 3, 3, 1, 1, 1, 4, 2, 2 };
    slove2(b);
    return 0;
}